/*****************************************
 *	VistaNavegador.cpp
 * 	Autor: Martin Lucero
 ****************************************/

#include "VistaNavegador.h"
#include "VentanaDiseniador.h"
#include <cstdlib>

#include <iostream>

VistaNavegador::VistaNavegador() {
	refTreeModel = Gtk::TreeStore::create(columnas);
	set_model(refTreeModel);
	set_reorderable();

	fila_mundo = *(refTreeModel->append());
	fila_mundo[columnas.columna_id] = 0;
	fila_mundo[columnas.columna_nombre] = "(Mundo sin nombre)";

	agregarNivel(1);

	append_column("ID", columnas.columna_id);
	append_column("Nombre", columnas.columna_nombre);

	signal_row_activated().connect(sigc::mem_fun(*this,
			&VistaNavegador::on_treeview_row_activated));
}

void VistaNavegador::on_name_mundo_changed(const Glib::ustring &nombre) {
	fila_mundo[columnas.columna_nombre] = nombre;
}

void VistaNavegador::on_id_nivel_changed(unsigned id) {
	fila_nivel_activa[columnas.columna_id] = id;
	char buffer[20];
	sprintf(buffer, "Nivel %d", id);
	fila_nivel_activa[columnas.columna_nombre] = buffer;
}

void VistaNavegador::agregarNivel(unsigned id) {
	fila_nivel_activa = *(refTreeModel->append(fila_mundo.children()));
	fila_nivel_activa[columnas.columna_id] = id;
	char buffer[20];
	sprintf(buffer, "Nivel %d", id);
	fila_nivel_activa[columnas.columna_nombre] = buffer;
	Glib::RefPtr<Gtk::TreeSelection> refTreeSelection = get_selection();
	refTreeSelection->select(fila_nivel_activa);
}

void VistaNavegador::on_treeview_row_activated(const Gtk::TreeModel::Path& path,
		Gtk::TreeViewColumn* /* columna */) {

	std::cout << "Handler row activated" << std::endl;

	Gtk::TreeModel::iterator iter = refTreeModel->get_iter(path);
	if (iter) {
		Gtk::TreeModel::Row row = *iter;
		unsigned idNivel = row[columnas.columna_id];

		/* No se selecciono la fila de mundo*/
		if (idNivel != 0) {

			std::cout << "ID nivel: " << idNivel << std::endl;

			VentanaDiseniador *ventana = dynamic_cast<VentanaDiseniador*>(
					get_toplevel());

			bool cambio = ventana->getPropiedadesMundoActual(
					)->cambiarNivelActual(idNivel);

			if (cambio) {
				ventana->actualizarVistaPropiedadesNivel();
				fila_nivel_activa = row;
			}
		}
	}

	std::cout << "Handler row activated terminado" << std::endl;
}

VistaNavegador::~VistaNavegador() { }
